//--------------------------------------------------
//装载html文件到指定标签中（如div）. 
//path:文件路径。container：对象id。
//如<div id="pp"></div>    js: loadHtml('./portal/default.jsp', 'pp');
function loadHtml(path, container){
	_loadHtml(path, container);
	container = $$(container);
	if(!container._pageHistory){
		container._pageHistory = new fPageHistory();
	}
	container._pageHistory.addPage(path);
}

function _loadHtml(path, container){
	/*
	__isLoadInSamePage = true;
	if(path.indexOf('.jsp') > -1) //动态页面
		path += ((path.indexOf('?')>-1) ? '&' : '?') + 'alpha_t='+new Date().getTime();
	AjaxPage(container, path, IncludeHTML);
	//*/
	container = $$(container);
	container.innerText = "";
	if($A(container, "tagName") != "IFRAME") {
		var o;
		if($('IFRAME', container).length > 0){
			o = $('IFRAME', container).get(0);
		}else{
//			o = document.createElement("iframe");
//			$(o).height("100%");
//			$(o).width("100%");
//			$A(o, "frameBorder", 0);
//			container.appendChild(o);
			$(container).append("<IFRAME style='WIDTH: 100%; HEIGHT: 100%' frameBorder='0'></IFRAME>");
			o = $('IFRAME', container).get(0);
		}
		
		container = o;
	}
	if(window.ALPHA_DEBUG){
		if(path.indexOf("?")>-1)
			path += "&alpha_t=" + new Date().getTime();
		else
			path += "?alpha_t" + new Date().getTime();
	}
	//$A(container, "src", path);
	container.src = path;
}


//刷新容器所装载的页面。
function refreshPage(container){
	container = $$(container);
	if(!container._pageHistory || !container._pageHistory.getCur())
		return;
		
	_loadHtml(container._pageHistory.getCur(), container);
}

//浏览历史中的上一页。
function prevPage(container){
	container = $$(container);
	var page;
	if(!container._pageHistory || !(page=container._pageHistory.prevPage()))
		return;
	
	_loadHtml(page, container);
}


//浏览历史中的下一页。
function nextPage(container){
	container = $$(container);
	var page;
	if(!container._pageHistory || !(page=container._pageHistory.nextPage()))
		return;
	
	_loadHtml(page, container);
}


var __isLoadInSamePage = false;
function fPageHistory(){
	this.count = 0;
	this.cur = -1;
	this.pages = [];
	this.getCur = function(){
		return this.pages[this.cur];
	};
	this.prevPage = function(){
		if(this.cur <= 0)
			return null;
		return this.pages[--this.cur];
	};
	this.nextPage = function(){
		if(this.cur >= this.count-1)
			return null;
		return this.pages[++this.cur];
	};
	this.addPage = function(url){
		if(this.cur+1 >= 20){
			this.pages.splice(0, 1);
			this.pages[this.cur] = url;
		}else{
			this.pages[++this.cur] = url;
			this.count = this.cur + 1;
		}
	};
}

//------------------------------------------
//触发页面装载完毕事件的响应函数，可以多次调用，加入多个响应函数。
function addOnLoad(f){
	if(!__isLoadInSamePage)
		$(f);	//这个是jquery的用法。
	else
		f();
}

function addOnUnload(f){
	$(window).unload(f);
}

var alpha_window_closed = true;


function addOnWindowClose(f){
	$(window).bind("beforeunload", function(){
		if(event.clientX>document.body.clientWidth&&event.clientY<0||event.altKey){
			f();
		}
		alpha_window_closed=false;
		});
	addOnUnload(function(){
		if(alpha_window_closed || window.screenLeft>10000){
			f();
		}
	});
}

//-----------------------------------
//判断是否IE浏览器。
function isIE(){
	return document.all ? true : false;
}

//--------------------------------
//获取html对象。可以跨frame获取对象。
//id:对象id或者对象本身。
function $$(id){
	if(typeof id == 'string'){
		var obj = document.getElementById(id);
		if(obj)return obj;
	
		var p = window;
		//先搜索自己的子frame
		var fs = [];
		for(var k=0; k<p.frames.length; ++k){
			fs.push(p.frames[k]);
		}
		for(var i=0; i<fs.length; ++i){
			obj = fs[i].document.getElementById(id);
			if(obj)return obj;
			for(var k=0; k<fs[i].frames.length; ++k){
				fs.push(fs[i].frames[k]);
			}
		}
		
		//找到最高层window
		while(p.parent != p){
			p = p.parent;
		}
		obj = p.document.getElementById(id);
		if(obj)return obj;
		
		//frames
		var fs = [];
		for(var k=0; k<p.frames.length; ++k){
			fs.push(p.frames[k]);
		}
		for(var i=0; i<fs.length; ++i){
			obj = fs[i].document.getElementById(id);
			if(obj)return obj;
			for(var k=0; k<fs[i].frames.length; ++k){
				fs.push(fs[i].frames[k]);
			}
		}
	}else if(typeof id == 'object')
		return id;
	else
		showDebugInfo('can not get object for:' + id);
}

function getElement(id){
	return $$(id);
}


//-----------------------------------------------
//获取html对象的属性。
//id:对象id或者对象本身。
//attrName:属性名。
function getAttribute(id, attrName){
	if($$(id).tagName=='FORM' && attrName=='action') //这个是针对ff做的。ff里即使是form.action=xx也要用这个方式获取。
		return $$(id).getAttribute(attrName);
		
	if($$(id)[attrName])
		return $$(id)[attrName];
	else
		return $$(id).getAttribute(attrName);
}

//设置html对象属性。
function setAttribute(id, attrName, value){
	//if(typeof value != 'object')
		$$(id).setAttribute(attrName, value);
	$$(id)[attrName] = value;
}

//$A(id, attrName)：获取对象属性。
//$A(id, attrName, value)：设置对象属性值。
function $A(id, attrName, value){
	if(arguments.length == 2)
		return getAttribute(id, attrName);
	else
		setAttribute(id, attrName, value);
}


//--------------------------------------
//获取作为对象直接后代的 DHTML 对象的集合。
//parent:父对象的id或本身。
function getChildren(parent){
	return $($$(parent)).children();
}

//返回对象所包含的元素集合。
function getAll(parent){
	return $($$(parent)).find("*");
}

//---------------------------------------------------------
//根据属性值寻找指定对象的子元素，返回一个数组。
function findElementsBy(parent, attrName, value){
	if(!isIE() && attrName=="className"){
		attrName = "class";
	}else if(isIE() && attrName=="class"){
		attrName = "className";
	}
	
	var fields = [];
	var child = $$(parent).firstChild;
	while(child != null){
		if(!child.getAttribute){
			child = child.nextSibling;
			continue;
		}
		if(child.getAttribute(attrName) != value){
			var fs = findElementsBy(child, attrName, value);
			for(var i=0,n=fs.length; i<n; ++i){
				fields.push(fs[i]);
			}
		}else{
			fields.push(child);
		}
		child = child.nextSibling;
	}
	
	return fields;
}

//联合多个属性值查找子元素。
//attrs:是一个Map。比如{"cid":'checkbox1', "checked":false}。表示所有需要查询的属性值。
function findElementsByAttrs(parent, attrs){
	var cc = [];
	var i = 0;
	for(p in attrs){
		if(i == 0){
			cc = findElementsBy(parent, p, attrs[p]);
		}else{
			var temp = [];
			for(var j=0; j<cc.length; ++j){
				if(cc[j][p] == attrs[p])
					temp.push(cc[j]);
			}
			cc = temp;
		}
		++i;
	}
	
	return cc;
}


//-----------------------------------------
//在指定元素之后插入一段html内容。
//id:元素id或元素本身。
//content:dom对象或者html文本。
function insertAfter(id, content){
	$($$(id)).after(content);
}


//在指定元素之前插入一段html内容。
function insertBefore(id, content){
	$($$(id)).before(content);
}

//给对象追加一个内容。
function appendChild(id, content){
	$($$(id)).append(content);
}

//给指定对象追加一个子内容于最开始处。
function prependChild(id, content){
	$($$(id)).prepend(content);
}

//删除对象。
function removeElement(id){
	if($$(id))
		$($$(id)).remove();
}

//----------------------------------------------------
//获得发出事件的源对象。取代ie中的event.srcElement。
function getEventTarget(event){
	if(isIE()){
		if(!event)event = window.event;
		return event.srcElement;
	}else{
		return event.target;
	}
}


//--------------------------------------------------
//终止事件。
function stopEvent(event){	//event.
	if(!event)event = window.event;
	if(!event)return;
	event.returnValue = false;
	event.cancelBubble = true;
	/*if(isIE()){
		event.returnValue = false;
		event.cancelBubble = true;
	}else{
		event.preventDefault();
		event.stopPropagation();
	}//*/
}



//-------------------------------------------------------
//绑定事件到到指定对象。
//id:对象id或对象本身。type:事件名，如"onclick"，fn:响应函数。
//bindOnce:若为true则会在触发一次后就自动取消。
function bindEvent(id, type, fn, bindOnce){
	if(type.indexOf('on') == 0)
		type = type.substring(2);
		
	if(bindOnce){
		$($$(id)).one(type, fn);
	}else{
		$($$(id)).bind(type, fn);
	}
}

//取消事件绑定。
function unBindEvent(id, type){
	if(type.indexOf('on') == 0)
		type = type.substring(2);
	$($$(id)).unbind(type);
}


//-------------------------------------------
//创建xml对象。
function createXML(){
	var _xml = null;
	if(isIE()){
		_xml = new ActiveXObject('Microsoft.XMLDOM');
	}else{
		_xml = document.implementation.createDocument("text/xml", "", null);
	}
	
	return _xml;
}


//--------------------------------------------------------
//获得地址栏url中的参数值。
//param:参数名。
function getParamValueOfURL(param) {
	var para,parastr;
	parastr = window.location.search;

	for(var m=0; m<2; ++m){
		if(!parastr){
			parastr = window.location.hash;//获取#后面的作为参数
			continue;
		}
		parastr = parastr.slice(1);
		para = parastr.split("&");	
		tempstr="";	
		for(i=0;i<para.length;i++)	{  
			tempstr = para[i];  
			pos = tempstr.indexOf("=");  
			if(tempstr.substring(0,pos) == param) {  	
				return decodeURI(tempstr.substring(pos+1));  
			}	
		}
		//获取#后面的作为参数
		parastr = window.location.hash;
	}
	return null;
}


//-----------------------------------------------
function getWidth(id){
	return $($$(id)).width();
}

function setWidth(id, val){
	$($$(id)).width(val);
}

function getHeight(id){
	return $($$(id)).height();
}

function setHeight(id, val){
	$($$(id)).height(val);
}

//--------------------------------------------------
//返回对象位于窗口的绝对左边距离
function getAbsoluteLeft( ob ){
 if(!ob){return null;}
   var obj = ob;
   var objLeft = obj.offsetLeft;
   while( obj != null && obj.offsetParent != null && obj.offsetParent.tagName != "BODY" ){
     objLeft += obj.offsetParent.offsetLeft;
     obj = obj.offsetParent;
   }
 return objLeft ;
}


//返回对象位于窗口的绝对上边距离
function getAbsoluteTop( ob ){
 if(!ob){return null;}
 var obj = ob;
 var objTop = obj.offsetTop;
 while( obj != null && obj.offsetParent != null && obj.offsetParent.tagName != "BODY" ){
   objTop += obj.offsetParent.offsetTop;
   obj = obj.offsetParent;
 }
 return objTop ;
}


//-----------------------------------------
function showDebugInfo(msg){
	if(window.ALPHA_DEBUG){
		alert("debug info:"+msg);
		throw msg;
	}else{

	}
}

//----------------------------------
//获取打开本页面时传入的参数
function getWindowArgument(key){
	return getParamValueOfURL(key);
}




//--------------------------------------------
//动态创建css。
//例子：createCSS(".tcss{background-color:blue;}");
function createCSS(css){
	if(isIE()){
		var ss = document.styleSheets;
		var oStyle ;
		if(ss.length > 0){
			oStyle = document.styleSheets[0];
		}else{
			oStyle = document.createStyleSheet();
		}
		var a=css.split("\n")
		for(var i=0;i<a.length;i++){
			if(a[i]=="")
				continue;
			var ad=a[i].replace(/([\s\S]*)\{([\s\S]*)\}/,"$1|$2").split("|")
			oStyle.addRule(ad[0],ad[1]);
		}
	}else{
		var style = document.createElement("style");
		style.type = "text/css";
		style.innerHTML=css
		document.getElementsByTagName("HEAD").item(0).appendChild(style);
	}
}


//-------------------------------------------------------------------
//给指定标签设置class。
//如：<div id="d"></div> 调用setClassName("d", "tcss"); 之后:<div id="d" class="tcss"></div>
function setClassName(id, className){
	var attr = "class";
	if(isIE())
		attr = "className";
	$A(id, attr, className);
}

function getClassName(id){
	var attr = "class";
	if(isIE())
		attr = "className";
	return $A(id, attr);
}


//-----------------------------------------------------------
//设置dom对象的style。
//用法：setStyle(id, 'width', '100')
//	或者setStyle(id, {width:'100', height:'100'})
function setStyle(id, p1, p2){
	$($$(id)).css(p1, p2);
}


function getStyle(id, name){
	return $$(id).style[name.replace(/\-(\w)/g,function(m,c){return c.toUpperCase();})];
}

function getCurrentStyle(id, name){
	return $($$(id)).css(name);
}



//--------------------------------------------------------
//操作cookie
function getCookie(key){
	coo = document.cookie;
	var k = coo.indexOf(key);
	if(k > -1){
		var k1 = coo.indexOf(";", k);
		if(k1 < 0)k1=coo.length;
		return coo.substring(k+key.length+1, k1);
	}
	return null;
}

function setCookie(key, value){
	var d = new Date();
	var expiration = new Date(d.getYear(), d.getMonth()+6, d.getDate());
	document.cookie = key + "=" + value + "; expires=" + expiration.toGMTString();
}


//-------------------------------------------------------------
//按比例缩放图片。
//img:图片对象。
//width,height:图片显示规定宽高。按比例缩放后可能不会填满，但不会超出。
//使用方法：<img src="flow.jpg" onload="zoomImg(this, 200, 200)">
function zoomImg(img, width, height)
{
	//var myImage = {width:img.width, height:img.height}
	var myImage = new Image();
    myImage.src = img.src;
	
	if(myImage.width>0 && myImage.height>0){
		var rate = 1;
		if(myImage.width>width || myImage.height>height){
			if(width/myImage.width<height/myImage.height){
				rate = width/myImage.width;
			}else{
				rate = height/myImage.height;
			}
		}
		if(isIE()){
			img.style.zoom = rate;
		}else{
			img.width = myImage.width*rate;
			img.height = myImage.height*rate;
		}
	}
	
	unBindEvent(img, "onload");
}



//--------------------------------------------------------------
//根据iframe装载的页面自动调整iframe高度。
//在iframe的onload里调用。iframe必须设置id和name。
//如：<iframe id="iid" name="iname" onload="tuneIFrameHeight('iid', 'iname')"></iframe>
function tuneIFrameHeight(iframe_id, iframe_name) 
{ 
	var frm = document.getElementById(iframe_id); 
	var subWeb = document.frames ? document.frames[iframe_name].document : frm.contentDocument; 
	if(frm != null && subWeb != null){ 
		frm.height = subWeb.body.scrollHeight;
	} 
}

//-----------------------------------------------------------
//String工具类
var StringUtil = {
	trim: function(str){
		$.trim(str);
	},
	//格式化字符串，参数：str(待格式化的字符串), p1, p2...
	//例子：StringUtil.format('this is the {0}, {1}, {0}', 'ss', 'ee');
	format: function(str){
		if(arguments.length == 0)
		  return "";
		 
		if(arguments.length == 1)
		  return arguments[0];
		 
		var reg = /{(\d+)?}/g;
		var args = arguments;
		var result = arguments[0].replace(
		  reg,
		  function($0, $1) {
		   	var s = args[parseInt($1)+1]
			return  s==null ? "" : s;
		  }
		 )
		
		return result;
	}
};


//-------------------------------------------------------------
//日期工具类
var DateUtil = {
	//日期格式化成字符串
	//例子：DataUtil.format(new Date(), "yyyy-MM-dd hh:mm:ss")
	format:function(date, format){
		var o = {
			"M+" : date.getMonth()+1, //month
			"d+" : date.getDate(),    //day
			"h+" : date.getHours(),   //hour
			"m+" : date.getMinutes(), //minute
			"s+" : date.getSeconds(), //second
			"q+" : Math.floor((date.getMonth()+3)/3),  //quarter
			"S" : date.getMilliseconds() //millisecond
		}
		if(/(y+)/.test(format)) format=format.replace(RegExp.$1,
		(date.getFullYear()+"").substr(4 - RegExp.$1.length));
		for(var k in o)if(new RegExp("("+ k +")").test(format))
		format = format.replace(RegExp.$1,
		RegExp.$1.length==1 ? o[k] :
		("00"+ o[k]).substr((""+ o[k]).length));
		return format;
	}
}